<html>
    <head>
        <title>拦截器</title>
    </head>
    <body>
        <script>
            //  拦截器

                    /*
                        一、 uni.addIntercepotor(string,object)

                                    1、概述   

                                                添加拦截器

                                    2、参数说明

                                                <1>、String 参数说明

                                                            需要拦截的api名称，如： uni.addIntercepotor('request',object),  这将拦截  uni.request() 

                                                      注意：

                                                            ①、仅支持异步接口，如：  uni.setStorage(Object),暂不支持同步接口 如：  uni.setStorageSync(key,data)

                                                            ②、uniCloud请求云端接口时(callFunction、uploadFile等)也会使用 uni.request发送请求，请确保拦截器内不错误的批处理此类请求

                                                <2>、Object 参数说明

                                                            参数名	            类型	必填		说明	                平台差异说明

                                                        1、invoke	        Function	否		拦截前触发	

                                                        2、returnValue	    Function	否		方法调用后触发，处理返回值

                                                        3、success	        Function	否		成功回调拦截	

                                                        4、fail	            Function	否		失败回调拦截	

                                                        5、complete	        Function	否		完成回调拦截


                                     3、示例

                                                uni.request({
                                                    url: 'request/login', //仅为示例，并非真实接口地址。
                                                    success: (res) => {
                                                        console.log(res.data);
                                                        // 打印： {code:1,...}
                                                    }
                                                });


                                                uni.addInterceptor('request', {
                                                    invoke(args) {
                                                        // request 触发前拼接 url
                                                        args.url = 'https://www.example.com/'+args.url
                                                    },
                                                    success(args) {
                                                        // 请求成功后，修改code值为1
                                                        args.data.code = 1
                                                    },
                                                    fail(err) {
                                                        console.log('interceptor-fail',err)
                                                    },
                                                    complete(res) {
                                                        console.log('interceptor-complete',res)
                                                    }
                                                })

                                                uni.addInterceptor({
                                                    returnValue(args) {
                                                        // 只返回 data 字段
                                                        return args.data
                                                    }
                                                })

                    */

                    /*
                        二、uni.removeInterceptor(string)

                                        删除拦截器

                                    
                                    1、String  参数说明

                                                需要删除拦截器的 api 名称

                                    2、示例：

                                            uni.removeInterceptor('request')

                                    3、注意：

                                            蓝旗uni.swithcTab本身没有问题。但是在微信小程序端点级 tabbar 的底层逻辑并不是触发 uni.switchTab.

                                            所以误认为拦截无效，此类场景的解决方案是在 tabbar页面的页面生命周期 onShow 中处理的。

                                           ★、拦截器的适用场景非常多，比如路由拦截、权限引导等。


                                                    你可以参考插件市场,拦截器应用示例：图片选择api时无权限，引导用户快捷打开系统设置：https://ext.dcloud.net.cn/plugin?id=5095
                    */
        </script>
    </body>
</html>